/**
 * props数据单向改变的操作：
 * @param props 即props
 * @param propName props的某个属性name
 * @param emits 即emits
 */
export const useVModel = (props: any, propName: string, emits: any) => {
  return computed({
    get() {
      // 可以返回一个代理，在代理里面可以拦截：
      return new Proxy(props[propName], {
        get(target, key, receiver) {
          return Reflect.get(target, key, receiver)
        },
        set(target, key, val) {
          console.log('common 内部set方法：', target, key, val)
          // 此时不该是修改操作，而是emits事件
          // target[key]= val

          // 原有对象，把相应的key替换掉即可。
          emits(`update:${propName}`, { ...target, [key]: val })
          return true
        },
      })
    },
    set(val) {
      // 只有修改selfData才会触发。如果是修改selfData的属性，不会触发的。。。。
      console.log('computed set方法')
      emits(`update:${propName}`, val)
    },
  })
}
